/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	Entry.java
 * 模块说明：	
 * 修改历史：
 * Apr 30, 2007 - lxm - 创建。
 */
package com.hd123.rumba.cartridge.entry;

import java.util.ArrayList;
import java.util.List;

import com.hd123.rumba.cartridge.biz.BCartFunctionView;
import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.user.PE;
import com.hd123.rumba.util.ObjectUtil;

/**
 * 模块功能入口 | 实体
 * <p>
 * 
 * BK = cfv + name
 * 
 * @author lxm
 * 
 */
public class Entry {

  /** 属性：所属构件包功能视图 */
  private BCartFunctionView cfv;
  /** 属性：标识。 */
  private String id;
  /** 属性：标题 */
  private String caption;
  /**
   * 属性：权限<br>
   * null表示不进行权限检查。默认为PE.TRUE，即权限检查始终返回null。
   */
  private PE permissions = PE.TRUE;
  /** 属性：提示信息 */
  private String hint;
  /** 属性：图像。 */
  private String image;
  /** 属性：表示热状态的图像。 */
  private String hotImage;
  /** 属性：链接列表 */
  private List<EntryLink> links;

  /**
   * 构造函数
   * 
   * @param cfv
   *          指定所属构件包功能视图。
   */
  public Entry(BCartFunctionView cfv) {
    super();
    links = new ArrayList();
    this.cfv = cfv;
  }

  public void setPermission(String permId) throws BusinessException {
    this.permissions = PE.P(permId);
  }

  /**
   * @see #appendLink(String, String, EntryLinkStyle)
   */
  public EntryLink appendLink(String url) throws BusinessException {
    return appendLink(url, null, null);
  }

  /**
   * @see #appendLink(String, String, EntryLinkStyle)
   */
  public EntryLink appendLink(String url, String target) throws BusinessException {
    return appendLink(url, target, null);
  }
  
  /**
   * @see #appendLink(String, String, EntryLinkStyle)
   */
  public EntryLink appendLink(String url, EntryLinkStyle style) throws BusinessException {
    return appendLink(url, null, style);
  }

  /**
   * 添加一个链接。
   * 
   * @param url
   *          指定链接的url。
   * @param target
   *          指定链接的target。默认为{@link EntryLink#VALUE_TARGET_DESKTOP}。
   * @param style
   *          指定链接类型。默认为{@link EntryLinkStyle#action}。
   * @return
   * @throws BusinessException
   */
  public EntryLink appendLink(String url, String target, EntryLinkStyle style) throws BusinessException {
    ObjectUtil.checkParameterNotNull(url, "url");
    if (target == null)
      target = EntryLink.VALUE_TARGET_DESKTOP;
    if (style == null)
      style = EntryLinkStyle.action;

    EntryLink link = new EntryLink(this);
    link.setUrl(url);
    link.setTarget(target);
    link.setStyle(style);
    this.links.add(link);
    return link;
  }

  public String getCaption() {
    return caption;
  }

  public void setCaption(String caption) throws BusinessException {
    if (caption == null)
      throw new BusinessException("属性caption不可为null。");
    this.caption = caption.trim();
  }

  public BCartFunctionView getCfv() {
    return cfv;
  }

  public String getHint() {
    return hint;
  }

  public void setHint(String hint) {
    this.hint = hint;
  }

  public String getHotImage() {
    return hotImage;
  }

  public void setHotImage(String hotImage) {
    this.hotImage = hotImage;
  }

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getImage() {
    return image;
  }

  public void setImage(String image) {
    this.image = image;
  }

  public PE getPermissions() {
    return permissions;
  }

  public void setPermissions(PE permissions) {
    this.permissions = permissions;
  }

  public List<EntryLink> getLinks() {
    return links;
  }

}
